高阶优化器:深度学习加速的利器
摘要
深度学习的训练往往极度依赖优化器的选择,从而获取最佳的模型参数来进行相关任务的预测。随着深度学习的高速发展,尤其是一阶优化器SGD的成功,使得越来越多的研究者对高阶优化器产生了兴趣。本文将介绍最基本SGD,以及具有自适应学习率的Adam优化器,再到拟二阶的L-BFGS和K-Fac优化器,最后介绍具有实际应用价值的二阶优化器AdaHessian,其可在大型推荐系统场景下比目前MLPerf打榜的AdaGrad优化器在一些数据集上拥有更快的收敛速度和更高的测试精度。
目前大部分的深度学习方法都依赖于目标损失函数的构建。例如在图像分类任务中,一个损失函数通常包含神经网络输出与真实标签,它衡量了神经网络输出与真实标签之间的差距。因此,当神经网络与目标而神经网络的输出相似时,损失函数则接近于零。然而,未经过训练的神经网络输出与真实标签往往差距巨大。神经网络的输出可以通过调整网络参数来改变,因此我们需要一套能调整网络参数使得损失函数最小化的方案,而这套流程则通常称之为网络训练。如何实施神经网络的训练则是由优化器算法来描述。
优化器算法的选择是受到不同任务、不同神经网络以及不同的软硬件架构的影响。一个合适的优化器算法可以在相对短的时间内收敛到一个数值接近于零的损失函数。然而在现实中,优化过程中往往会遇到许多难题。首先,某些优化器对应的一些问题无法让损失函数曲线下降甚至导致发散,原因可能是问题结构本身并不适合一些特定的优化器算法,或者是优化器超参数例如学习率设置过高等等。其次,优化的代价过高,在大规模模型上无法实现,需要使用稀疏和分布式算法来降低内存需求。又或者优化器无法在短时间内收敛,需要使用更复杂的优化器算法来加速收敛,然而通常这些方法会额外增加计算负担,因此需要一些特殊技巧来保证优化器算法在精度和效率中得到平衡。
神经网络训练几乎是深度学习任务中最为关键一步,因为尚未训练好的网络几乎无法做出有效预测(如同抛硬币般随机的预测)。因此,随着深度学习方法的高速发展,业界与学术界也加大了对注优化器算法的关注力度,诞生了越来越多的改进算法。
在深度学习领域中,由于网络规模庞大,可调参数往往是百万、千万、上亿甚至更多。因此许多深度学习任务仍会倾向使用简洁高效计算量小的优化算法。最经典的莫过于随机梯度下降(SGD)。SGD的主要思想比较直观:不断地往梯度最陡的方向前进,持续迭代直至最终走到谷底。我们可以用数学公式来表示梯度的迭代算法
大部分的一阶优化器其实多多少少都是基于SGD上在不同方向进行改进。然而,如果想要在本质上进行收敛加速,我们则需要用到二阶导数信息来进行网络参数优化迭代。首先我们对损失函数使用泰勒级数进行函数展开
然而,牛顿法因为需要储存Hessian矩阵并且对其求逆的计算在深度学习任务中难以实现。例如,对于一个拥有一百万网络参数的模型而言,我们需要储存一个一兆大小的Hessian矩阵。在32位精度下,这会需要(1*10^12)*(32/8)/(10^9)=4000GB的内存!在实际应用中,例如推荐系统中一个embedding table都轻易包含了50亿以上的参数,这使得该Hessian矩阵的储存都难以被目前任何设备所储存。除此之外,我们还需要在每一步迭代中对其求逆并进行乘法操作,这是目前几乎很难高效完成的计算任务。因此目前二阶优化器算法都会在Hessian矩阵上做出一些假设或者其他技巧来进行近似估算(也称为拟牛顿法),从而大幅度地减少储存与计算量。
此外,我们还需要保证Hessian矩阵是正定的(特征值都为正数),否则牛顿法很有可能会带领参数值进入损失函数的鞍点而不是最小值。一个简单的方法则是在Hessian矩阵的对角元素加上一些量 从而使Hessian矩阵正定。我们也可以在做近似估算Hessian矩阵时构造一个接近于正定矩阵的方法,例如将要介绍的高斯-牛顿法和自然梯度法(natural gradient method)。
在得到了Hessian对角向量后,AdaHessian会对其进行移动平均(SMA)的操作来降低噪声的影响
这里 是移动平均的窗口大小。例如在卷积网络中,每一层卷积核的Hessian对角向量的大小都会有所不同,因此我们也可以将 设为一个卷积核的大小(图3)。不过, 的选值似乎在一些常见任务中对AdaHessian的整体预测效果影响不大[5]。
图3:基于卷积核大小的平均窗口选择对应Hessian对角向量的移动平均操作。[5]
我们总结下AdaHessian的算法,当得到平均过的Hessian对角向量 后,我们就可以进行参数更新了。具体操作与Adam算法类似,AdaHessian的一阶动量项 和二阶动量项 分别由以下公式进行更新
这里
图4:AdaHessian对比目前主流的优化器算法。[5]
作为一个真正意义的二阶优化器,AdaHessian每一步所使用的时间也仅仅比SGD和Adam慢两倍左右(图5)。因此与许多传统的二阶优化器不同,它可以很好地被应用于目前主流地深度学习任务中,例如视觉,语音识别,翻译,推荐系统等。
图5:AdaHessian于SGD和Adam在视觉任务中的计算效率对比
在推荐系统任务中,相对于目前主流的AdaGrad优化器,AdaHessian能意外地提高测试精度(图6)。虽然提高比例貌似不大,但是在推荐系统领域里,即使很小的精度提升都是极为困难的,并且因为用户基数巨大,因此小精度提升也往往会带来非常可观的收益[6]。
图6:AdaHessian与AdaGrad在Criteo数据集对于DLRM网络的训练与测试精度收敛图。[5]
目前大部分的深度学习任务仍然首选一阶优化器,因为这些一阶方法的具有简单易用的特点。然而,由于Hessian矩阵能够提供更多的收敛信息,且随着硬件和软件的升级加速,我们相信越来越多能应用在深度学习任务中的二阶优化器算法将被挖掘出来。除了优化器算法本身,我们还可以在其他方面加速优化效果。例如,调用学习策略,或者在网络中加入正则化(权重衰减,
随着优化器的快速发展,相信未来神经网络的训练将更为便捷,并且训练出来的网络也将拥有更好的预测能力。
[1] Austin Derrow-Pinion, Jennifer She, David Wong, et al. ETA Predictionwith Graph Neural Networks in Google Maps. 2021
[1] B. Ginsburg et al., “Stochastic Gradient Methods with Layer-wise Adaptive Moments for Training of Deep Networks,” May 2019.
[2] J. Martens and R. Grosse, “Optimizing Neural Networks with Kronecker-factored Approximate Curvature,” Mar. 2015.
[3] R. Grosse and J. Martens, “A Kronecker-factored approximate Fisher matrix for convolution layers,” Feb. 2016.
[4] J. Martens, J. Ba, and M. Johnson, “Kronecker-factored curvature approximations for recurrent neural networks,” 2018.
[5] Z. Yao, A. Gholami, S. Shen, M. Mustafa, K. Keutzer, and M. W. Mahoney, “ADAHESSIAN: An Adaptive Second Order Optimizer for Machine Learning,” Jun. 2020.
[6] R. Wang, B. Fu, G. Fu, and M. Wang, “Deep & Cross Network for Ad Click Predictions,” Aug. 2017.
[7] P. Foret, A. Kleiner, H. Mobahi, and B. Neyshabur, “Sharpness-Aware Minimization for Efficiently Improving Generalization,” Oct. 2020.
[8] T. Müller, A. Evans, C. Schied, and A. Keller, “Instant Neural Graphics Primitives with a Multiresolution Hash Encoding,” Jan. 2022, doi: 10.1145/3528223.3530127.
往期推荐
壁仞科技研究院作为壁仞科技的前沿研究部门,旨在研究新型智能计算系统的关键技术,重点关注新型架构,先进编译技术和设计方法学,并将逐渐拓展研究方向,探索未来智能系统的各种可能。壁仞科技研究院秉持开放的原则,将积极投入各类产学研合作并参与开源社区的建设,为相关领域的技术进步做出自己的贡献。